博客
关于我
实验三:STM32使用固件库点亮LED
阅读量:400 次
发布时间:2019-03-05

本文共 3418 字,大约阅读时间需要 11 分钟。

编程要点

1)使能GPIO端口时钟;

2)初始化GPIO目标引脚为推挽输出模式
3)控制GPIO引脚输出高低,电平。

bsp_led.h文件

#ifndef T_LED_H_#define T_LED_H_#include "stm32f10x.h"//R-红色#define LED1_GPIO_PORT			GPIOB#define LED1_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED1_GPIO_PIN			GPIO_Pin_5//G-绿色#define LED2_GPIO_PORT			GPIOB#define LED2_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED2_GPIO_PIN			GPIO_Pin_0//B-蓝色#define LED3_GPIO_PORT			GPIOB#define LED3_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED3_GPIO_PIN			GPIO_Pin_1

以上代码分别把控制LED灯的GPIO端口,GPIO引脚号以及GPIO端口时钟封装起来了。在实际控制的时候我们就可以直接使用这些宏,以达到应用代码与硬件无关的效果。

/*直接操作寄存器的方法控制IO*/#define digitalHi(p,i)              {p->BSRR=i;}//输出高电平#define digitalLo(p,i)              {p->BRR=i;}//输出低电平#define digitalToggle(p,i)          {p->ODR^=i;}//输出反转状态/*定义控制IO的宏*/#define LED1_TOGGLE					digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯反转#define LED1_OFF					digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯灭#define LED1_ON						digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯亮#define LED2_TOGGLE					digitalToggle(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯反转#define LED2_OFF					digitalHi(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯灭#define LED2_ON						digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯亮#define LED3_TOGGLE					digitalToggle(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯反转#define LED3_OFF					digitalHi(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯灭#define LED3_ON						digitalLo(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯亮//红#define LED_RED		         		LED1_ON;LED2_OFF;LED3_OFF		//红#define LED_GREEN 	 				LED1_OFF;LED2_ON;LED3_OFF		//绿#define LED_BLUE    				LED1_OFF;LED2_OFF;LED3_ON      //蓝#define LED_YELLOW 					LED1_ON;LED2_ON;LED3_OFF       //黄#define LED_PURPLE  				LED1_ON;LED2_OFF;LED3_ON       //紫#define LED_CYAN        			LED1_OFF;LED2_ON;LED3_ON       //青#define LED_WHITE  	    			LED1_ON;LED2_ON;LED3_ON        //白#define LED_RGBOFF 	     			LED1_OFF;LED2_OFF;LED3_OFF     //黑void LED_GPIO_Config(void);#endif /*T_LED_H_*/

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bsp_led.c文件:

#include "bsp_led.h"void LED_GPIO_Config(void){   				//定义一个GPIO_InitTypeDef类型的结构体变量		GPIO_InitTypeDef GPIO_InitStructure;		//开启LED相关的GPIO外设时钟		RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);			//选择引脚模式为通用推挽输出		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   		//设置引脚速率为50MHz		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 		//选择要控制的GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);			//初始化GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);		//初始化GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);		//关灯		GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);		//关灯		GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);	     	//关灯		GPIO_SetBits(LED3_GPIO_PORT, LED3_GPIO_PIN);}

Main.c文件

#include "stm32f10x.h"#include "bsp_led.h"#define SOFT_DELAY Delay(0x0FFFFF);void Delay(__IO u32 nCount); int main(void){   		/*LED端口初始化*/	LED_GPIO_Config();	 	while (1)	{   		LED1_ON;			 		SOFT_DELAY;		LED1_OFF;		   		LED2_ON;			 		SOFT_DELAY;		LED2_OFF;		 		LED3_ON;			 		SOFT_DELAY;		LED3_OFF;		  		/*轮流显示,红绿蓝黄紫青白*/		LED_RED;		SOFT_DELAY;				LED_GREEN;		SOFT_DELAY;				LED_BLUE;		SOFT_DELAY;				LED_YELLOW;		SOFT_DELAY;				LED_PURPLE;		SOFT_DELAY;						LED_CYAN;		SOFT_DELAY;				LED_WHITE;		SOFT_DELAY;				LED_RGBOFF;		SOFT_DELAY;			}}void Delay(__IO uint32_t nCount)	 //延时函数{   	for(; nCount != 0; nCount--);}

LED电路连接图

在这里插入图片描述

程序下载验证:

在这里插入图片描述

转载地址:http://zdpzz.baihongyu.com/

你可能感兴趣的文章
Netty原理分析及实战(一)-同步阻塞模型(BIO)
查看>>
Netty原理分析及实战(三)-高可用服务端搭建
查看>>
Netty原理分析及实战(二)-同步非阻塞模型(NIO)
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty发送JSON格式字符串数据
查看>>
Netty和Tomcat的区别已经性能对比
查看>>
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍
查看>>
Netty基础—1.网络编程基础一
查看>>
Netty基础—1.网络编程基础二
查看>>
Netty基础—2.网络编程基础三
查看>>
Netty基础—2.网络编程基础四
查看>>
Netty基础—3.基础网络协议一
查看>>
Netty基础—3.基础网络协议二
查看>>
Netty基础—4.NIO的使用简介一
查看>>
Netty基础—4.NIO的使用简介二
查看>>
Netty基础—5.Netty的使用简介
查看>>
Netty基础—6.Netty实现RPC服务一
查看>>
Netty基础—6.Netty实现RPC服务三
查看>>
Netty基础—6.Netty实现RPC服务二
查看>>
Netty基础—7.Netty实现消息推送服务一
查看>>